# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=boost1.79
pkgver=1.79.0
_pkgver="${pkgver//./_}"
pkgrel=1
pkgdesc="Free peer-reviewed portable C++ source libraries"
url="https://www.boost.org/"
arch="all"
license="BSL-1.0"
depends="$pkgname-libs"
depends_dev="$pkgname linux-headers bzip2-dev icu-dev xz-dev zlib-dev"
makedepends="$depends_dev python3-dev>=3.8 flex bison"
subpackages="
	$pkgname-static
	$pkgname-dev
	$pkgname-doc
	boost-dev:_dev
	"
source="https://boostorg.jfrog.io/artifactory/main/release/$pkgver/source/boost_$_pkgver.tar.bz2
	boost-1.57.0-python-abi_letters.patch
	boost-1.57.0-python-libpython_dep.patch
	0001-revert-cease-dependence-on-range.patch
	boost-1.79.0-fix-segfault-in-array-erase.patch
	"
builddir="$srcdir/boost_$_pkgver"

_enginedir="tools/build/src/engine"
_bjam="$builddir"/$_enginedir/b2

_libs="
	atomic
	chrono
	container
	context
	contract
	coroutine
	date_time
	fiber
	filesystem
	graph
	iostreams
	locale
	log_setup
	log
	math
	prg_exec_monitor
	program_options
	python3
	random
	regex
	serialization
	stacktrace_basic
	stacktrace_noop
	system
	thread
	timer
	type_erasure
	unit_test_framework
	wave
	wserialization
	json
	nowide
	"
for _lib in $_libs; do
	subpackages="$subpackages $pkgname-${_lib}:_boostlib"
done; unset -v _lib
subpackages="$subpackages $pkgname-libs"

# Claim the unversioned name, this must be removed once we switch our
# boost to a new version
provides="boost=$pkgver-r$pkgrel"
replaces="boost boost1.78"

_set_options() {
	local _python="$(_pyversion python3)"
	export PY3_VERSION="$_python"
	export BOOST_ROOT="$builddir"

	_options="
		--user-config=\"$builddir/user-config.jam\"
		--prefix=\"$pkgdir/usr\"
		variant=release
		python=$PY3_VERSION
		toolset=gcc
		debug-symbols=off
		threading=multi
		runtime-link=shared
		link=shared,static
		cflags=-fno-strict-aliasing
		--layout=system
		-q
		-j${JOBS:-2}
		"
}

prepare() {
	default_prepare
	_set_options

	local abiflags="$(python3-config --abiflags)"

	# create user-config.jam
	cat > user-config.jam <<-__EOF__

	using gcc : : $CC : <cxxflags>"$CXXFLAGS" <linkflags>"$LDFLAGS" ;
	using python : $PY3_VERSION : /usr/bin/python3 : /usr/include/python${PY3_VERSION}$abiflags : : : : $abiflags ;

	__EOF__
}

build() {
	_set_options

	msg "Building bjam"
	cd "$builddir"/$_enginedir
	CC= ./build.sh gcc

	msg "Building bcp"
	cd "$builddir"/tools/bcp
	"$_bjam" -j${JOBS:-2}

	msg "Building boost"
	cd "$builddir"

	"$_bjam" $_options
}

check() {
	cd "$builddir"/tools/build/test

	PATH="${_bjam%/*}:$PATH" python3 test_all.py --default-bjam
}

package() {
	_set_options

	install -Dm755 "$_bjam" \
		"$pkgdir"/usr/bin/b2
	ln -s b2 "$pkgdir"/usr/bin/bjam # old name for b2 binary

	install -Dm755 dist/bin/bcp "$pkgdir"/usr/bin/bcp

	install -Dm644 LICENSE_1_0.txt \
		"$pkgdir"/usr/share/licenses/$pkgname/LICENSE_1_0.txt

	"$pkgdir"/usr/bin/bjam $_options \
		--includedir="$pkgdir"/usr/include \
		--libdir="$pkgdir"/usr/lib \
		install
}

static() {
	pkgdesc="Boost static libraries"
	depends="$depends_static"

	# Claim the unversioned name, this must be removed once we switch our
	# boost to a new version
	provides="boost-static=$pkgver-r$pkgrel"
	replaces="boost-static"

	amove usr/lib/lib*.a
}

_boostlib() {
	local name="${subpkgname#$pkgname-}"
	pkgdesc="Boost $name shared library"
	depends="$depends__boostlib"

	# Claim the unversioned name, this must be removed once we switch our
	# boost to a new version
	provides="boost-$name=$pkgver-r$pkgrel"
	replaces="boost-$name"

	amove usr/lib/libboost_$name*.so.[0-9]*
}

libs() {
	default_libs

	# Claim the unversioned name, this must be removed once we switch our
	# boost to a new version
	provides="boost-libs=$pkgver-r$pkgrel"
	replaces="boost-libs"

	pkgdesc="Boost shared libraries"
	depends="$depends_libs"
	local _pkg; for _pkg in $origsubpackages; do
		case "$_pkg" in
			*:_boostlib) depends="$depends ${_pkg%%:*}" ;;
		esac
	done

	mkdir -p "$subpkgdir"
	rmdir "$pkgdir"/usr/lib >/dev/null 2>&1 || :
}

dev() {
	# Claim the unversioned name, this must be removed once we switch our
	# boost to a new version. Replace previous boost version for clean -dev
	# upgrade
	default_dev
	replaces="boost1.78-dev"
}

_dev() {
	# This makes boost-dev be a metapackage that depends on boostX.Y-dev
	mkdir -p "$subpkgdir"
	depends="$pkgname-dev=$pkgver-r$pkgrel"
}

doc() {
	# Claim the unversioned name, this must be removed once we switch our
	# boost to a new version
	provides="boost-doc=$pkgver-r$pkgrel"
	replaces="boost-doc"

	default_doc
}

_pyversion() {
	"$1" -c 'import sys; print("%i.%i" % (sys.version_info.major, sys.version_info.minor))'
}

sha512sums="
70909e0561c213d10a1fdd692f9ae7b293d3cdc63e925bdc207da9e9bba6e86474341100e7ee5de6d94f9561196b1a3a1597055a7b7382babf8931131170a312  boost_1_79_0.tar.bz2
d96d4d37394a31764ed817d0bc4a99cffa68a75ff1ecfd4417b9e1e5ae2c31a96ed24f948c6f2758ffdac01328d2402c4cf0d33a37107e4f5f721e636daebd66  boost-1.57.0-python-abi_letters.patch
132c4b62815d605c2d3c9038427fa4f422612a33711d47b2862f2311516af8a371d6b75bf078a7bffe20be863f8d21fb9fe74dc1a1bac3a10d061e9768ec3e02  boost-1.57.0-python-libpython_dep.patch
9b53d2fe2dddd592e43db03c26fadd6c07d4c45a980ae4c775b7a914346a3914f6e0c3ef42dad5e2ea4568afb86c9967e09444ff609cfba1e1d39f4980b22ad6  0001-revert-cease-dependence-on-range.patch
17db69e7b41665b2fae5630aa5edf15f0b8d00aa04e8597b198eb4f530793e8227d0234ceb9c8a9859fac3a4ceb5b9eb51721329b91497a422d4ff579739b964  boost-1.79.0-fix-segfault-in-array-erase.patch
"
